home *** CD-ROM | disk | FTP | other *** search
/ Info-Mac 4 / Info_Mac IV CD-ROM (Pacific HiTech Inc.)(August 1994).iso / Development / General / CW TCL port package / Template Munger / Source / main.c next >
Text File  |  1994-05-29  |  4KB  |  194 lines

  1. /*
  2.  * main.c
  3.  */
  4.  
  5. void Idle ( void ) ;
  6. void Message ( unsigned char * ) ;
  7. void Try ( short code ) ;
  8.  
  9. unsigned char * folder_to_munge = "\pTO MUNGE" ;
  10. unsigned char * message_file = "\pMESSAGES" ;
  11. unsigned char * output_folder = "\pTEMPLATE MACROS" ;
  12.  
  13. extern short out_vRef;            // folder for output files
  14. extern long out_parID;
  15.  
  16. Handle windowText = NULL ;
  17. WindowPtr window = NULL ;
  18. short vRefNum = 0 ;
  19. Boolean done = 0 ;
  20.  
  21.  
  22. extern void MungeFolder ( long parID ) ;
  23.  
  24.  
  25. void
  26. Try ( short code ) {
  27.  
  28.     if ( code ) {
  29.         DebugStr ( "\pFailure!" ) ;
  30.     }
  31. }
  32.  
  33.  
  34. static void
  35. InitMac ( ) {
  36.     InitGraf ( & qd . thePort ) ;
  37.     InitFonts ( ) ;
  38.     InitWindows ( ) ;
  39.     InitMenus ( ) ;
  40.     TEInit ( ) ;
  41.     InitDialogs ( NULL ) ;
  42. }
  43.  
  44.  
  45. static void
  46. UpdateWindow ( ) {
  47.  
  48. Rect r = window -> portRect ;
  49.  
  50.     InsetRect ( & r , 3 , 3 ) ;
  51.     TextFont ( GetAppFont ( ) ) ;
  52.     TextSize ( GetDefFontSize ( ) ) ;
  53.     HLock ( windowText ) ;
  54.     TextBox ( * windowText , GetHandleSize ( windowText ) , & r , teJustLeft ) ;
  55.     HUnlock ( windowText ) ;
  56. }
  57.  
  58.  
  59. static void
  60. Click ( EventRecord * er ) {
  61.  
  62. WindowPtr win ;
  63. short code ;
  64. Rect limit = ( * GetGrayRgn ( ) ) -> rgnBBox ;
  65.  
  66.     InsetRect ( & limit , 3 , 3 ) ;
  67.     code = FindWindow ( er -> where , & win ) ;
  68.     switch ( code ) {
  69.     case inSysWindow :
  70.         SystemClick ( er , win ) ;
  71.         break ;
  72.     case inDrag :
  73.         DragWindow ( win , er -> where , & limit ) ;
  74.         break ;
  75.     }
  76. }
  77.  
  78.  
  79. void
  80. Idle ( ) {
  81. EventRecord er ;
  82.  
  83.     WaitNextEvent ( -1 , & er , 0L , NULL ) ;
  84.     switch ( er . what ) {
  85.     case mouseDown :
  86.         Click ( & er ) ;
  87.         break ;
  88.     case updateEvt :
  89.         SetPort ( window ) ;
  90.         BeginUpdate ( window ) ;
  91.         EraseRect ( & ( window -> portRect ) ) ;
  92.         UpdateWindow ( ) ;
  93.         EndUpdate ( window ) ;
  94.         break ;
  95.     }
  96. }
  97.  
  98.  
  99. static void
  100. SetWindowText ( unsigned char * string ) {
  101.  
  102.     PtrToXHand ( string + 1 , windowText , * string ) ;
  103.     SetPort ( window ) ;
  104.     UpdateWindow ( ) ;
  105. }
  106.  
  107.  
  108. void
  109. Message ( unsigned char * message ) {
  110.  
  111. static short refNum = 0 ;
  112. long len ;
  113. static unsigned long last = 0 ;
  114.  
  115.     do {
  116.         Idle ( ) ;
  117.     } while ( TickCount ( ) < last + 5 ) ;
  118.     last = TickCount ( ) ;
  119.  
  120.     if ( ! message ) {
  121.         if ( refNum ) {
  122.             FSClose ( refNum ) ;
  123.             FlushVol ( NULL , 0 ) ;
  124.         }
  125.         refNum = 0 ;
  126.         return ;
  127.     }
  128.     if ( ! refNum ) {
  129.         Create ( message_file , 0 , 'MPS ' , 'TEXT' ) ;
  130.         Try ( FSOpen ( message_file , 0 , & refNum ) ) ;
  131.         Try ( SetEOF ( refNum , 0L ) ) ;
  132.     }
  133.     if ( refNum ) {
  134.         len = * message ;
  135.         Try ( FSWrite ( refNum , & len , message + 1 ) ) ;
  136.     }
  137.     SetWindowText ( message ) ;
  138. }
  139.  
  140.  
  141. static void
  142. MakeWindow ( ) {
  143.  
  144.     window = GetNewWindow ( 128 , NULL , NULL ) ;
  145.     if ( ! window ) {
  146.         Try ( -192 ) ;
  147.     }
  148.     windowText = NewHandle ( 0L ) ;
  149.     Message ( "\pWelcome!\r" ) ;
  150.     SelectWindow ( window ) ;
  151.     ShowWindow ( window ) ;
  152. }
  153.  
  154.  
  155. void
  156. main ( ) {
  157.  
  158. CInfoPBRec rec ;
  159.  
  160.     InitMac ( ) ;
  161.     MakeWindow ( ) ;
  162.  
  163.     rec . hFileInfo . ioNamePtr = output_folder ;
  164.     rec . hFileInfo . ioVRefNum = 0 ;
  165.     rec . hFileInfo . ioDirID = 0 ;
  166.     rec . hFileInfo . ioFDirIndex = 0 ;
  167.     rec . hFileInfo . ioFlAttrib = 0;
  168.     PBGetCatInfoSync(&rec);
  169.     if ( rec . hFileInfo . ioFlAttrib & 0x10 ) {
  170.         out_vRef = rec.hFileInfo.ioVRefNum;
  171.         out_parID = rec.hFileInfo.ioDirID;
  172.     } else {
  173.         Message ( "\pTEMPLATE MACROS is not a folder!" ) ;
  174.     }
  175.  
  176.     if (out_parID != 0) {
  177.         rec . hFileInfo . ioNamePtr = folder_to_munge ;
  178.         rec . hFileInfo . ioVRefNum = 0 ;
  179.         rec . hFileInfo . ioDirID = 0 ;
  180.         rec . hFileInfo . ioFDirIndex = 0 ;
  181.         rec . hFileInfo . ioFlAttrib = 0;
  182.         PBGetCatInfoSync(&rec);
  183.         if ( rec . hFileInfo . ioFlAttrib & 0x10 ) {    
  184.             MungeFolder ( rec . hFileInfo . ioDirID ) ;
  185.         } else {
  186.             Message ( "\pTO MUNGE is not a folder!" ) ;
  187.         }
  188.     }
  189.  
  190.     Message ( "\pClick To Exit\r" ) ;
  191.     Message ( NULL ) ;
  192.     Idle ( ) ;
  193. }
  194.